﻿// 111111.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include <string>
using namespace std;

/*
* http://oj.daimayuan.top/course/22/problem/900
*
给你一个整数 n，你需要按一定顺序输出所有由字符 0 和 1 组成的 n 位字符串。

输出第 k行为所有含有 k−1 个 1 的字符串。每一行的字符串按字典序排好，并用一个空格隔开，详见样例。

输入格式一行一个整数 n。

输出格式
输出 n行，每行若干个字符串，用空格隔开。

样例输入
3
样例输出
000
001 010 100
011 101 110
111
数据规模
对于所有数据，保证 2≤n≤18。
*/
const int N = 20;
vector<string> v[N];
int n;
string res;

void dfs(int x, int one) {
	if (0 == x) {
		v[one].push_back(res);
		return;
	}

	res.push_back('0');
	dfs(x - 1, one);
	res.pop_back();

	res.push_back('1');
	dfs(x - 1, one + 1);
	res.pop_back();
}


int main()
{
	cin >> n;
	dfs(n, 0);

	for (int i = 0; i <= n; i++) {
		if (!v[i].empty()) {
			for (auto e : v[i]) {
				cout << e << " ";
			}
		}
		cout << endl;
	}

	return 0;
}

